IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='spRpt_CentroCosto' and XTYPE='P')
BEGIN
	DROP PROCEDURE [dbo].[spRpt_CentroCosto]
END
GO
CREATE PROCEDURE [dbo].[spRpt_CentroCosto]
	 @OP VARCHAR(64)=NULL
	,@ParamAuxiliar NVARCHAR(MAX)=NULL   /* PARAMETRO AUXILIAR */
	,@CodCentroCosto_Ini VARCHAR(16)=NULL
	,@CodCentroCosto_Fin VARCHAR(16)=NULL
	,@CodCentroCostoSuperior_Ini VARCHAR(16)=NULL
	,@CodCentroCostoSuperior_Fin VARCHAR(16)=NULL
WITH ENCRYPTION
AS
SET NOCOUNT ON
BEGIN TRY

--DECLARE @AUX VARCHAR(2048)

/*****     Imprimir    *****/
IF @OP = 'Imprimir'
BEGIN
	
	SELECT 
		 @CodCentroCosto_Ini=CASE WHEN @CodCentroCosto_Ini IS NULL OR RTRIM(@CodCentroCosto_Ini)='' THEN REPLICATE(' ',16) ELSE @CodCentroCosto_Ini END
		,@CodCentroCosto_Fin=CASE WHEN @CodCentroCosto_Fin IS NULL OR RTRIM(@CodCentroCosto_Fin)='' THEN REPLICATE('Z',16) ELSE @CodCentroCosto_Fin END
		,@CodCentroCostoSuperior_Ini=CASE WHEN @CodCentroCostoSuperior_Ini IS NULL OR RTRIM(@CodCentroCostoSuperior_Ini)='' THEN REPLICATE(' ',16) ELSE @CodCentroCostoSuperior_Ini END
		,@CodCentroCostoSuperior_Fin=CASE WHEN @CodCentroCostoSuperior_Fin IS NULL OR RTRIM(@CodCentroCostoSuperior_Fin)='' THEN REPLICATE('Z',16) ELSE @CodCentroCostoSuperior_Fin END
			
	SELECT
		 t.CodCentroCosto AS [CODIGO CENTRO COSTO]
		,t.NombreCentroCosto AS [NOMBRE CENTRO COSTO]
		,t.CodCentroCostoSuperior AS [CODIGO GRUPO]
		,CASE WHEN t.Activo=1 THEN 'SI' ELSE 'NO' END AS [ACTIVO]
	FROM
		[dbo].[CentroCosto] t
	WHERE
		t.CodCentroCosto BETWEEN @CodCentroCosto_Ini  AND @CodCentroCosto_Fin
		AND ISNULL(t.CodCentroCostoSuperior,'') BETWEEN @CodCentroCostoSuperior_Ini  AND @CodCentroCostoSuperior_Fin		
	ORDER BY
		t.CodCentroCosto ASC	
	RETURN 0
END

--- Si se llega a este punto es porque el @OP indicado no Existe en el Procedimiento Almacenado
IF @OP IS NOT NULL
	BEGIN
	SET @ParamAuxiliar='La Operacion "'+@OP+'" No esta definida en el Procedimiento almacenado "'+OBJECT_NAME(@@PROCID)+'", Revise!.'
	RAISERROR(@ParamAuxiliar,16,1)
	RETURN 1
END

--- CONTROLAR Y REGISTRAR LOS ERRORES
END TRY
BEGIN CATCH
	--- Recopilo la informacion del error
	DECLARE @ERROR_NUMBER INT=ERROR_NUMBER(),@ERROR_SEVERITY INT=ERROR_SEVERITY(),@ERROR_STATE INT=ERROR_STATE(),@ERROR_PROCEDURE VARCHAR(128)=ERROR_PROCEDURE(),@ERROR_LINE INT=ERROR_LINE(),@ERROR_MESSAGE VARCHAR(4096)=ERROR_MESSAGE()
	--- Si hay transacciones abiertas, hago un rollback, SE ENCIERRA EN UN (TRY-CATCH) PARA QUE NO SE MUESTRE EL ERROR: Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT
	IF(@@TRANCOUNT>0) BEGIN BEGIN TRY ROLLBACK TRANSACTION END TRY BEGIN CATCH END CATCH END
	--- Ejecuto el SP que controla y registra el error
	EXEC [spSeguridadMessageException] @OP='MostrarMensaje',@ERROR_NUMBER=@ERROR_NUMBER,@ERROR_SEVERITY=@ERROR_SEVERITY,@ERROR_STATE=@ERROR_STATE,@ERROR_PROCEDURE=@ERROR_PROCEDURE,@ERROR_LINE=@ERROR_LINE,@ERROR_MESSAGE=@ERROR_MESSAGE
	RETURN 1
END CATCH;
